/*
 * To convertir this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ort.workshopTDD.money;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.MathContext;

/**
 *
 * @author madrax
 */
public class TasaDeCambio {
  private String monedaOrigen;
  private String monedaDestino;
  private BigDecimal cambio;
  
  public TasaDeCambio(String monedaOrigen, String monedaDestino, BigDecimal cambio) {
    this.monedaOrigen = monedaOrigen;
    this.monedaDestino = monedaDestino;
    this.cambio = cambio;
  }
  
  public Dinero convertir(Dinero monedaAConvertir) throws Exception {
    if (monedaAConvertir.getMoneda().equals(getMonedaOrigen())){
      return new Dinero(monedaAConvertir.getCantidad().multiply(getCambio()),this.getMonedaDestino());
    }
    else if(monedaAConvertir.getMoneda().equals(getMonedaDestino())){
      BigDecimal cambioInverso = (new BigDecimal(BigInteger.ONE)).divide(getCambio(), MathContext.DECIMAL32);
      BigDecimal montoConvertido = monedaAConvertir.getCantidad().multiply(cambioInverso);
      
      return new Dinero(montoConvertido.round(MathContext.DECIMAL32),this.getMonedaOrigen());
    }
    else{
      throw new Exception("Moneda a Convertir no aplica a la tasa de cambio actual.");
    }
  }

  /**
   * @return the monedaOrigen
   */
  public String getMonedaOrigen() {
    return monedaOrigen;
  }

  /**
   * @return the monedaDestino
   */
  public String getMonedaDestino() {
    return monedaDestino;
  }

  /**
   * @return the cambio
   */
  public BigDecimal getCambio() {
    return cambio;
  }

}
